package com.hy;

/**
 * Created With IntelliJ IDEA.
 * Descriptions:统计范围内的元音字符串数
 *
 * 给你一个下标从 0 开始的字符串数组 words 以及一个二维整数数组 queries 。
 *
 * 每个查询 queries[i] = [li, ri] 会要求我们统计在 words 中下标在 li 到 ri 范围内
 * （包含 这两个值）并且以元音开头和结尾的字符串的数目。
 *
 * 返回一个整数数组，其中数组的第 i 个元素对应第 i 个查询的答案。
 *
 * 注意：元音字母是 'a'、'e'、'i'、'o' 和 'u' 。
 *
 * author: Mr.Du
 * Date: 2023/6/2
 * Time: 17:33
 */
public class VowelStrings {
    /**
     * 该题就是动态规划
     * dp[i]表示以i结尾，最大的元音字符串数
     * 如果words[i]是元音字符串，那么dp[i] = dp[i - 1] + 1,否则dp[i] = dp[i - 1]
     * 最后根据queries总结结果，
     * @param words
     * @param queries
     * @return
     */
    public int[] vowelStrings(String[] words, int[][] queries) {
        int m = queries.length, n = words.length;
        int[] res = new int[m];
        int[] dp = new int[n + 1];
        int index = 0;
        
        for(int i = 1;i < dp.length;i++){
            if(isVowel(words[i - 1].charAt(0)) &&
                    isVowel(words[i - 1].charAt(words[i - 1].length() - 1))){
                dp[i] = dp[i - 1] + 1;
            }else{
                dp[i] = dp[i - 1];
            }
        }
        // dp[queries[i][1] + 1] - dp[queries[i][0]]
        // dp[queries[i][1] + 1]为啥要加1，是因为dp数组是从1开始记录第一个字符串的，
        for(int i = 0; i < m;i++){
            res[index++] = dp[queries[i][1] + 1] - dp[queries[i][0]];
        }
        return res;
    }
    
    public boolean isVowel(char c){
        return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
    }
}
